perm filename SCOLB.F4[MUS,LCS]6 blob
sn#103271 filedate 1974-05-24 generic text, type T, neo UTF8
C THIS PROGRAM IS THE PROPERTY OF LELAND SMITH, PROFESSOR OF MUSIC
C AT STANFORD UNIVERSITY. IT MAY NOT BE COPIED OR ALTERED IN ANY
C WAY WITHOUT WRITTEN PERMISSION OF THE AUTHOR.
C 6/10/72 ********** SCORE ********** LELAND SMITH, SEP.1969
C THIS PROGRAM WRITES NOTE LISTS FOR THE PDP10 SOUND
C GENERATION PROGRAM.
C IF # OF INSTS IS CHANGED, ALSO CHANGE # IN 'INFO' FORMAT.
C LOAD 'SCORE' WITH BRZ.REL (RAN. NUM GENERATOR),SPRINT.MAC AND,
C SCANX, (AND QUAD AND QUADO WHEN THEY ARE READY) AND
C IF DESIRED, A SUBROUTINE WITH THE FOLLOWING HEADING:
C SUBROUTINE SUBR
C COMMON /INS/ INST(27),BG(60)
C COMMON P(30),INUM,IPAR,CNT(27),BT,PL(48),IREST,DF
C INUM=INST# IPAR=PARAM#
C BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C IF IREST IS <0, THAT NOTE WILL BE A REST.
C INST=INST. NAME, BG=INSTS' BEGIN TIMES.
C NOTE #S IN SUBROUTINE: (1-84) C4=37 FS4=43 C5=49 ETC.
C F1=86 F15=100 (NO F16!)
COMMON /Q/ BNW(100),NWZ
COMMON /INS/INST,BG
DIMENSION ROFF(27),V(2000),NP(27),PCH(27,32),INST(27)
1 ,RDEV(27),IPT(27,31),XT(27),BG(60),OTH(20,16),SCAL(101)
1 ,IV(2000),NCNT(27,32),P1(27),IT(30),JFM(4)
1 ,IOUT(70),IFM(80),COPY(30),LIST(78),JPT(837)
1 ,FINM(6),TINST(5),TPALN(4),ENFI(5),TEDIT(4),INVIS(27)
C WITH VX,IOUT AT 70 AND IFM AT 80 OK FOR ONLY
C 40 LIT CHARS + 30 PARAMS PER INST.
C 60 BG TIMES AVAILABLE. FOR INSTS AND INSERTS AND EDITS.
COMMON P(30),J,L,CNT(27),BT,PL(48),MK,DF,DUR(27)
1 ,IQ(27),KL,X,ZPAR,KA,LK,NNUM,JJ,JA,ISUB,NFLG,IXX,ISEMI,IQT
1 ,INP(72),VX(70),ISCA(12),IDAT(11),IAMP,K,KN,M,ML,CODE,IBLA
EQUIVALENCE (PP1,P(1)),(P(2),P2),(P(3),P3),(P(4),P4),
1 (VX1,VX(1)),(INP1,INP(1)),(PL4,PL(4)),(IPP,ISCA(2))
1 ,(IEN,ISCA(4)),(IPT,JPT),(ISS,ISCA(9)),(ITT,ISCA(11))
1 ,(IE,ISCA(5)),(ID,ISCA(3)),(IF,ISCA(6)),(IAA,ISCA(10))
1 ,(VX2,VX(2)),(VX3,VX(3)),(NCNT,PCH),(VX4,VX(4))
1 ,(VX5,VX(5)),(IDOT,IDAT(11)),(VX,IOUT),(IFM3,IFM(3))
1 ,(IT,INP(27)),(V,IV),(PLAY,ISCA(7)),(IFM2,IFM(2))
1 ,(IFM4,IFM(4)),(IFM(3),LIST)
DATA KZY/27/,ISEMI/';'/,RTF/.05/,IQT/'"'/
1, JFM(3)/','/
C IAA=A ID=D IE=E IF=F IEN=N IPP=P ISS=S ITT=T
DATA KSLA/'/'/,IBLA/' '/,BLA/' '/,IXX/'X'/,ITMPO/'TEMPO'/
1 ,ISCA/'C','P','D','N','E','F','PLAY;','G','S','A','T','B'/
1 ,IDAT/'0','1','2','3','4','5','6','7','8','9','.'/
1 ,SCAL/'C/8','CS/8','D/8','DS/8','E/8','F/8','FS/8','G/8',
1 'GS/8','A/8','AS/8','B/8','C/4','CS/4','D/4','DS/4','E/4',
1 'F/4','FS/4','G/4','GS/4','A/4','AS/4','B/4','C/2','CS/2',
1 'D/2','DS/2','E/2','F/2','FS/2','G/2','GS/2','A/2','AS/2',
1 'B/2','C','CS','D','DS','E','F','FS','G','GS','A','AS',
1 'B','C*2','CS*2','D*2','DS*2','E*2','F*2','FS*2','G*2',
1 'GS*2','A*2','AS*2','B*2','C*4','CS*4','D*4','DS*4','E*4',
1 'F*4','FS*4','G*4','GS*4','A*4','AS*4','B*4','C*8','CS*8',
1 'D*8','DS*8','E*8','F*8','FS*8','G*8','GS*8','A*8','AS*8',
1 'B*8','R','F1','F2','F3','F4','F5','F6','F7','F8','F9',
1 'F10','F11','F12','F13','F14','F15','END'/,I1X/'1X'/
1 ,IFM(1)/'('/,IFM2/'1XA5,'/,IFCOM/5H', ',/,IA1/'A1,'/
LPAR=0
IPRN=0
QX=0.
MOT=0
RETRO=-1.
INVRT=-1
LCNT=1
PARENS=0
JZ=1
CALL RNDINT
PR=0
IAMP=0
C IAMP IS 'BLANK LINE'FLAG ON PP1-3.
T5=0
NINS=0
K=0
IDALL=-1
QTS=-1.
KB=0
NWZ=1
BNW(1)=0
I=1
KL=0
TP=0
KN=IBLA
RA=0
CHN=0
DO 127 K=1,77,3
127 LIST(K)=0
C INITIALIZES MOTIVIC LIST FOR ERROR FINDING ROUTINE.
NWX=0
BY=-1
DO 1128 K=1,KZY
INVIS(K)=0
INST(K)=0
CNT(K)=0
RDEV(K)=0
C RDEV IS FOR RAND DEVIATIONS AT RUN TIME
NP(K)=0
IQ(K)=0
C IQ IS FOR RESTART FLAG
IPT(K,1)=0
DO 1128 L=1,32
1128 PCH(K,L)=0
ITYP=-1
C TYPE 'FILE NAME', TEMPO FACTOR(0=1), AMPL.FACT(0=1),
C SECONDS TO BE OMITTED, DUR AT CUTOFF.
JED=-1
2112 TYPE 8002
1112 ACCEPT 77732,INP
JFM(4)='5F)'
JFM(1)=' (A'
C FOR FREE 'A' FORMAT
CALL FMT(JFM,INP,MLX)
REREAD JFM,K,TF,AMPFAC,OP1,DURX
C JFM IS THE CURRENT FORMAT STATEMENT
IF(K.NE.'EDIT')GO TO 3112
JED=0
GO TO 2112
C 'E(DIT)' GOES TO EDIT MODE
3112 IF(TF.EQ.0)TF=1.
IF(AMPFAC.EQ.0)AMPFAC=1.
CC**FROM 11700 CHANGED 3/73 IF(TF.NE.999.)GO TO 21122
21122 IF(K.NE.'TYPE')GO TO 128
ITYP=0
DATA FINM/30H(' TYPE OUTPUT FILE NAME'/) /
TYPE FINM
C TO USE TYPE-IN MODE. FILE OF INPUT IS WRITTEN ON FOR21.DAT
ACCEPT 1127,ISLAC
IF(ISLAC.EQ.IBLA)STOP
REWIND 21
CC WRITE (21,11122) ISLAC
WRITE (21,1127) ISLAC
GO TO 3127
11122 FORMAT(1XA5,72A1)
128 IF(K.NE.'INFO')GO TO 3128
TYPE 8002
TYPE 1113
TYPE 118
TYPE 1114
TYPE 8002
GO TO 1112
118 FORMAT(' TO DSK=1, TTY=2, BOTH=0, LPT=22, PROOF=3, DEBUG=4'/)
8002 FORMAT(' TYPE FILE NAME'/)
8001 FORMAT(A5,5F)
107 FORMAT(I,A5,5F)
1113 FORMAT(' NAME, TF, AMPFAC, OMIT", DUR".'/)
1114 FORMAT(' N1, N2=RAN NUM, N3=0 LISTS INPUT, N4=SINGLE INST.'/
1 ' IF -- N1=3 DURS ONLY, =4 V ARRAY'/
1 3X' 27 INSTRUMENTS ARE AVAILABLE'/)
1127 FORMAT(A5,72A1)
3128 IF(K.NE.IBLA)IFLNM=K
CALL IFILE(1,IFLNM)
READ(1,107)LN,ISLAC
REREAD 77732,INP
C FOR LATER USE
IF(LN.NE.0)GO TO 3127
C JUMP IF THE FILE HAS LINE NUMBERS.
REREAD 1127,ISLAC
C REREADS FIRST LINE
CC IF(ISLAC.NE.'COMME')GO TO 3127
CC DO 31271 K=1,72
CC READ(1,77732),KL,KL
CC31271 IF(KL.EQ.ISEMI)GO TO 3127
C TO SKIP OVER 'COMMENT' SECTION OF TVED FILES.
3127 TYPE 118
IF(DURX.EQ.0)DURX=19999.
IXIN=1
CC -- NOW AT TOP OF PAGE 4(2/74) DO 1107 K=1,30
CC1107 PL(K)=1.
INONLY=-1
ACCEPT 300,MX,X,Y,Z
IF(Z.NE.0)INONLY=Z
IF(X.NE.0)IXIN=X
C MX=3 GIVES DURS ONLY
C TO SUPPRESS LIST OF INPUT DATA, TYPE ANY 3RD NUM. (BUT 9.)
C (1 1 1 =RECORD,RAN. NUM=1,SUPPRESS INPUT.)
MZ=0
JOUT=5
C 5=OUTPUT TO TTY
SOS=-1.
IF(Y.NE.0)SOS=0
C IF 3RD NUM≠0, EDIT FILE WILL PRINT AS IT IS READ.
IF(MX.NE.22)GO TO 2107
JOUT=22
REWIND 22
2107 IF(MX.LE.1)MX=MX-2
IF(MX.EQ.-2.OR.MX.EQ.2.OR.MX.EQ.22)MZ=-1
IF(MX.EQ.4)MZ=-4
IF(SOS.AND.ITYP)WRITE(JOUT,87732)INP
CC IF(ITYP.EQ.0)GO TO 2308
CC WRITE(JOUT,77732)INP
C *************** READS INPUT ***********************
2308 IF(ITYP)GO TO 2127
DATA TINST /25H(' TYPE INST NAME, ETC'/)/
1,TEDIT/20H(' RETYPE LINE?'/ )/
23081 TYPE TINST
ACCEPT 77732,INP
IF(JED)WRITE(21,77732)INP
JFM(4)='72A1)'
C PUTS ON LPT AND TTY
CC JFM(1)=' (A'
CC CALL FMT(JFM,INP,MLX)
CC REREAD JFM,J,INP
CC WRITE(21,11122) J,INP
GO TO 1074
2127 JREAD=1
4400 READ(1,77732,END=2337)INP
IF(SOS)WRITE(JOUT,87732)INP
GO TO(441,442,443,444,445,446)JREAD
441 JFM(4)='72A1)'
IF(LN.EQ.0)GO TO 1074
REREAD 2114,LN,INP
JFM(1)=' (I,A'
CALL FMT(JFM,INP,MLX)
REREAD JFM,LN,J,INP
GO TO 4127
1074 JFM(1)=' (A'
CALL FMT(JFM,INP,MLX)
REREAD JFM,J,INP
CC IF(LN.EQ.0)READ(1,1127,END=2337)J,INP
4127 IF(JED.OR.K.EQ.'Y')GO TO 41271
C K CHECK IS TO PASS AFTER RETYPING
TYPE TEDIT
ACCEPT 77732,K
IF(K.EQ.'Y')GO TO 23081
IF(K.EQ.'G')JED=-1
41271 IF(J.EQ.IBLA)GO TO 2308
MLX=1
IZ=0
JA=-1
ISUB=4
ALL=1.
VX1=0
VX2=0
VX3=0
LK=-1
K=0
IF(V(I-1).NE.-9900.-BY)GO TO 364
BY=-1.
I=I-1
364 DO 361 JD=1,72
N=INP(JD)
IF(N.NE.'R')GO TO 361
C LOOKS FOR 'RESTART'
DO 3611 M=JD,72
KL=INP(M)
IF(KL.EQ.IBLA.OR.KL.EQ.ISEMI.OR.KL.EQ.KSLA.OR.KL.EQ.',')GO TO 3631
CC IF(INP(M).EQ.IBLA)GO TO 3631
3611 INP(M)=IBLA
C CHANGES 'RESTART' TO BLANKS
3631 DO 363 N=1,NINS
IF(J.NE.INST(N))GO TO 363
IQ(N)=-1
C SETS RESTART FLAG. THIS INST WILL NOW APPEAR WITH NEW NUM.
GO TO 362
363 CONTINUE
361 IF(N.EQ.KSLA.OR.N.EQ.ISEMI)GO TO 6773
6773 K=K+1
IF(K.GT.NINS)GO TO 36
IF(INST(K).NE.J.OR.IQ(K).EQ.-1)GO TO 6773
C FINDS CORRECT INST NUM. PASSES RESTARTED INSTS.
LK=K
GO TO 1773
36 IF(J.EQ.'RUN;'.OR.J.EQ.'RUN')GO TO 2337
IF(J.EQ.'INSER'.OR.J.EQ.'EDIT')ISUB=6
IF(J.EQ.ITMPO.OR.J.EQ.'CONDU'.OR.J.EQ.'PLAY'.OR.ISUB.GT.4)
1GO TO 1773
IF(J.EQ.'SECTI')GO TO 1081
C****************** ABOVE AND BELOW FOR 'SECTIONS'
IF(J.EQ.'END'.OR.J.EQ.'END S'.OR.J.EQ.'FINIS')GO TO 1082
362 LK=NINS+1
IF(LK.GT.KZY)GO TO 99
INST(LK)=J
IZ=LK
GO TO 1773
C*********** DOWN TO 99 FOR 'SECTIONS'
1083 V(I)=-99.
KL=1
GO TO 3083
C READS 'PLAY SECT. N1,N2'
1081 V(I)=-199.
KL=4
3083 DO 2081 K=KL,72
IF(INP(K).EQ.IBLA)GO TO 2081
IV(I+1)=INP(K)
I=I+2
3081 BY=-1.
GO TO 2308
2081 CONTINUE
C READS SECTION IDENTIFIER, -199. MARKS BEGINNING
C1082 IF(V(I-1).EQ.-9900.-BY)I=I-1
C********* FEB 15,71
1082 V(I)=-299.
I=I+1
GO TO 3081
C MARKS END OF SECTION
C************************
99 TYPE 199,LN
STOP
199 FORMAT(' ERROR!! LAST LINE READ =',I6/)
4 IF(LK.LE.NINS)GO TO 8773
IF(ALL.GT.0)GO TO 1004
IF(IDALL.GT.0)GO TO 8773
BG(LK)=VX1
IDALL=LK
GO TO 2004
C 'MOVE' CHANGES IN 'ALINS' CAN'T BE RESET IN INDIV. INSTS.
1004 BG(LK)=VX1
IF(LK.EQ.IZ)VX1=0
C MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0.
C CHECK EFFECT ON 'MOVE'!
C ******** APR.23, 1971 FIXES BG TIMES IN 'MOVE'?????!!!!!!!
2004 NINS=LK
IF(VX3.NE.0)VX2=10000.+VX3
IF(VX2.EQ.0)VX2=-1
DUR(LK)=VX2
GO TO 900
C******** ABOVE FOR REST ONLY ENTRIES. FEB 18,71
8773 IF(VX2.NE.0)VX1=VX1*10000.+VX2
900 IF(VX1.EQ.BY.AND.J.NE.'PLAY')GO TO 5773
C*********** 'PLAY' IS FOR 'SECTIONS'
BY=VX1
C BY=CURRENT BG TIME.
C********* FEB 15,71
V(I)=-9900.-BY
I=I+1
IF(NWZ.NE.0)CALL BGSORT(BY)
5773 IF(J.EQ.'TEMPO')GO TO 1106
IF(J.EQ.'CONDU')GO TO 3018
IF(J.EQ.'PLAY')GO TO 1083
C*********** ABOVE FOR 'SECTIONS'
4773 NW=LPAR
IF(I.GT.1900.)TYPE 107,I
ALL=1.
DF=0
ISUB=1
1299 IF(JZ.NE.0)GO TO 1773
7773 IF(ITYP)GO TO 77731
DATA TPALN /20H(' TYPE A LINE'/) /
77734 TYPE TPALN
ACCEPT 77732,INP
IF(JED)WRITE(21,77732) INP
IF(INP1.EQ.IBLA)GO TO 77734
GO TO 77733
77732 FORMAT(72A1)
87732 FORMAT(1X72A1)
77731 JREAD=2
GO TO 4400
442 IF(LN.NE.0)REREAD 2114,LN,INP
IF(INP1.EQ.IBLA)GO TO 77731
IF(JED)GO TO 77733
TYPE TEDIT
ACCEPT 77732,K
IF(K.EQ.'Y')GO TO 77734
IF(K.EQ.'G')JED=-1
C DOESN'T WORK FOR EDITS AND INSERTS YET???
CC IF(SOS)WRITE(JOUT,2114),LN,INP
77733 MLX=1
C 'LISTS' MUST END WITH *
CC1773 JZ=0
1773 IF(IPRN.EQ.0)GO TO 17732
L=I-1
IF(QTS.AND.V(I-1).EQ.999.)L=L-1
IPRN=IPRN-1
IF(PARENS.EQ.0)GO TO 17733
PARENS=0
LIST(LCNT+2)=L
LCNT=LCNT+3
IF(IPRN.EQ.0)GO TO 17732
IPRN=0
17733 LIST(MOT)=L
MOT=0
C FOR ERROR TRAP
17732 JZ=0
N=0
17731 ML=MLX
C BIG LOOP -- TO END OF PAGE 1.
JD=ML
975 N=INP(JD)
IF(N.EQ.IBLA.OR.N.EQ.',')GO TO 236
C ((((())))) MAY 13,71 /Z (D4/E/X 2 3)/ CS/ ETC. CAN USE 26 LABELS.
33611 IF(N.NE.'('.AND.N.NE.')')GO TO 2361
INP(JD)=IBLA
L=JD-1
5113 IF(INP(L).NE.IBLA)GO TO 2113
L=L-1
GO TO 5113
2113 IF(N.EQ.')')GO TO 3361
IF(PARENS.EQ.0)GO TO 1140
LCNT=LCNT+3
IF(MOT.NE.0)GO TO 11403
MOT=LCNT-1
1140 DO 11401 JC=1,LCNT-1,3
IF(INP(L).NE.LIST(JC))GO TO 11401
C FINDS DUPLICATE IDENTIFIER
TYPE 11402,INP(L)
GO TO 99
11403 TYPE 11404
GO TO 99
11404 FORMAT(' MORE THAN 2 PARENS OPEN'/)
11402 FORMAT(' MOTIVIC (',A1,') USED TWICE')
11401 CONTINUE
LIST(LCNT)=INP(L)
PARENS=-1.
INP(L)=IBLA
LIST(LCNT+1)=I
GO TO 236
CC33612 IF(QTS)GO TO 236
CC GO TO 6721
C ''''''' FOR SINGLE QUOTES
3361 IPRN=IPRN+1
CC IF(QTS)GO TO 236
CC GO TO 7231
GO TO 236
C JUMPS BACK INTO QUOTE SECTION
CQ IF(PARENS.EQ.0)GO TO 2140
CQ LIST(LCNT+2)=L
CQ LCNT=LCNT+3
CQ PARENS=0
CQ GO TO 33612
CQ2140 LIST(MOT)=L
CQ GO TO 33612
CQC ))))))))))) LAST ) CAN'T APPEAR AT END OF LINE!!
C @@@@@@@@@@@@ /@Z/DS3/ ETC.
2361 IF(N.NE.'@')GO TO 5361
DO 113 L=1,72
K=JD+L
C K IS USED AT 240!!!
JG=INP(K)
IF(JG.NE.'-')GO TO 6113
RETRO=0
INP(K)=IBLA
GO TO 113
6113 IF(JG.NE.'$')GO TO 7113
C '$' IS FOR INVERSIONS IN 'NOTES'
INVRT=0
GO TO 113
7113 IF(JG.NE.IBLA)GO TO 4113
113 CONTINUE
4113 DO 6361 L=1,LCNT,3
IF(JG.NE.LIST(L))GO TO 6361
VX1=0
DO 40 M=JD+2,72
JG=INP(M)
IF(JG.EQ.IBLA)GO TO 40
IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.'*')GO TO 140
ML=M
GO TO 240
40 CONTINUE
240 JC=JA
JA=-1
INP(K)=IBLA
CALL SCANR
JA=JC
140 JC=1
KN=LIST(L+1)
M=LIST(L+2)+1
IF(RETRO)GO TO 640
JC=M-1
M=KN-1
KN=JC
JC=-1
RETRO=-1.
640 IF(INVRT)GO TO 940
840 X=V(KN)
V(I)=X+VX1
C FINDS CENTER FOR INVERSION (+TRANSP.)
I=I+1
KN=KN+JC
IF(V(KN-JC).NE.85.)GO TO 940
V(I-1)=85.
GO TO 840
940 Z=V(KN)
IF(INVRT.EQ.0)GO TO 440
IF(VX1.EQ.0)GO TO 540
C " @Q N " WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
IF(CODE.EQ.-33.)GO TO 440
V(I)=Z*VX1
GO TO 7361
440 IF(Z.EQ.85.)GO TO 540
Y=0
IF(INVRT.EQ.0)Y=(X-Z)*2.
V(I)=Z+VX1+Y
GO TO 7361
540 V(I)=Z
7361 I=I+1
KN=KN+JC
IF(KN.NE.M)GO TO 940
INVRT=-1
RB=V(I-1)
CC ICT=-1
DO 8361 L=JD,72
JG=INP(L)
CC IF(JG.EQ.ISEMI)GO TO 93611
C PUT IN NOV 25, 72
IF(JG.EQ.ISEMI)GO TO 93612
INP(L)=IBLA
IF(JG.EQ.KSLA)GO TO 9361
IF(JG.EQ.')')IPRN=IPRN+1
CC8361 IF(JG.EQ.'*')ICT=0
8361 IF(JG.EQ.'*')IAMP=-1
9361 MLX=L
C FIX THIS & =IBLA BY CHNGING DO LOOP TO 'GO TO' AT 6721,2722
CC IF(ICT.AND.QTS)GO TO 17731
CC↓↓↓↓↓↓↓↓↓↓↓ CHNGD JUNE 24,73 IF(IAMP.EQ.0.AND.QTS)GO TO 17731
IF(IAMP.EQ.0.AND.QTS)GO TO 1773
JZ=-1
CC IF(QTS)GO TO 3013
93612 IF(IAMP.EQ.0)GO TO 93611
CC93612 IF(ICT.EQ.0)IAMP=-1
C NOV 25, 72
IF(QTS)GO TO 3013
GO TO 2722
CC93611 IF(ICT.EQ.0.AND.QTS.EQ.0)GO TO 2722
CC93611 IF(IAMP.AND.QTS.EQ.0)GO TO 2722
C THESE ARE FOR "LIT" ITEMS
C ******* DO NOT USE '@-' OR '@$' WITH 'LIT' ****** ! ! ! !
CC IF(QTS)GO TO 7773
93611 IF(JG.EQ.ISEMI)GO TO 7773
JZ=0
IF(IPRN.NE.0)GO TO 1773
C ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑PICKS UP ' @X)/ ' SITUATION. 22/6/73
GO TO 236
C LAST TIME FOR QUOTES
CC93611 IF(ICT.AND.QTS)GO TO 7773
C********↑↑ ↑↑ WAS TO 6017 JUNE 10,71
CC IF(QTS)GO TO 3013
CC IF(ICT)GO TO 6721
C JUMPS TO END STRING OF QUOTES
6361 CONTINUE
GO TO 99
C @@@@@@@@@@@@@@@@@@@@@@@@@@
5361 IF(N.NE.ID.OR.ISUB.NE.1)GO TO 53611
IF(INP(JD+1).NE.IF)GO TO 236
C JUMP IF NOT DUTY FACTOR
DF=DF-100.
CC GO TO 53611
GO TO 43615
53611 IF(N.NE.ISS.OR.INP(JD+1).NE.'U')GO TO 53612
DF=DF-200
C FOR SUBROUTINE FLAG. CAN'T CALL SUBR AT SAME TIME AS REP OR X!!!!
GO TO 43615
53612 IF(N.NE.IAA)GO TO 43611
C FINDS 'ALL'.
IF(INP(JD+1).NE.'L')GO TO 236
ALL=-1.
CC INP(JD+2)=IBLA
CC53611 INP(JD)=IBLA
CC INP(JD+1)=IBLA
CC GO TO 236
GO TO 43615
C TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.
C QUAD CALL MUST BE IN 1ST OF 5 PARAMS. QUAD MUST BE FOLLOWED
C BY SPC, / OR ;. OTHER CALLS SUCH AS MOVE,NUM ETC. CAN
C APPEAR BEFORE / OR ;, BUT "ALL" MUST! APPEAR
C BEFORE! QUAD (IF USED).
C ADD AN "F" TO QUAD FOR FUNCTIONS, AN "X" FOR X,Y COORDS.
C BASIC QUAD PRODUCES CIRCLES. /DEGS/RADIUS/CENT. X/CENT. Y/
C QUADX -- /X /Y / (5TH PARAM WILL ALWAYS BE WASTED)
43611 IF(N.NE.'Q'.OR.INP(JD+1).NE.'U')GO TO 4361
QX=-13.
DO 43612 N=JD,72
J=INP(N)
IF(J.EQ.IXX)QX=QX-1.
IF(J.EQ.IF)QX=QX-2.
IF(J.EQ.IBLA.OR.J.EQ.KSLA.OR.J.EQ.ISEMI.OR.J.EQ.',')GO TO 236
43612 INP(N)=IBLA
4361 IF(N.NE.'I')GO TO 43613
IF(ISUB.NE.4)GO TO 43613
C NEXT MAKES INST NAME, P1 AND P2 INVISIBLE (REPLACES SEG, ETC.)
INVIS(LK)=-1
43615 DO 43614 L=JD,72
N=INP(L)
IF(N.EQ.IBLA.OR.N.EQ.','.OR.N.EQ.ISEMI.OR.N.EQ.KSLA)GO TO 236
43614 INP(L)=IBLA
43613 IF(N.NE.KSLA)GO TO 636
MLX=JD+1
JZ=-1
INP(JD)=ISEMI
436 IF(INP(MLX).NE.IBLA)GO TO 336
MLX=MLX+1
GO TO 436
636 IF(N.NE.ISEMI)GO TO 936
336 IF(ISUB.EQ.104)GO TO 104
IF(ISUB.GT.3)GO TO 1899
GO TO (101,102,103),ISUB
C PAR MOV LIST OTHERS
936 IF(N.NE.IDOT)GO TO 736
L=INP(JD+1)
DO 836 KL=1,10
836 IF(L.EQ.IDAT(KL))GO TO 236
IF(CODE.EQ.-22.)INP(JD)=1
GO TO 236
C CHANGES DOTTED RHYTHMS TO '1'S.
736 IF(N.NE.'*')GO TO 136
IAMP=-1
INP(JD)=IBLA
C ******* WAS ISEMI ****** WHY?
136 IF(N.NE.IQT)GO TO 236
DO 1361 K=JD+1,72
IF(INP(K).NE.IQT)GO TO 1361
JD=K+1
GO TO 975
C SKIPS MATE∧aP⊂⊂IN QUOTES
1361 CONTINUE
GO TO 99
C OPEN QUOTES
236 JD=JD+1
IF(JD.LT.73)GO TO 975
TYPE 1236
GO TO 99
1236 FORMAT(' MISSING SEMICOLON')
101 N=INP(ML)
IZ=ML
ML=ML+1
IF(N.EQ.IBLA)GO TO 101
C ⊗⊗⊗⊗⊗ MAY 13,71 @@@@@@@@@@
JA=-1
IF(N.EQ.IPP)GO TO 1
IF(N.EQ.IE)GO TO 2308
IF(N.EQ.'R')GO TO 2337
C 'RUN' MAY REPLACE 'END' FOR LAST INST.
IF(N.EQ.ID)GO TO 7720
GO TO 99
1 CALL SCANR
LPAR=VX1
IJ=LPAR
IF(QX.GE.0)GO TO 5703
IJ=LPAR+4
C SETS UP PARAM FOR QUAD CALL
V(I)=IJ+LK*10000
V(I+1)=2*ALL
C TEST "ALL" FEATURE HERE!!!!!!!
C X=-13(DEGREES),=-14(X,Y),=-15(CIRCLE FUNCTS),=-16(LINE FUNCTS)
V(I+2)=QX
I=I+3
QX=0.
5703 IAMP=0
IF(IJ.GT.NP(LK).AND.IJ.LT.31)NP(LK)=IJ
IF(LPAR.EQ.32)LPAR=1
V(I)=LPAR+LK*10000
C +1=WDCNT, +2=CODE, +3='NM' CCCCC
IJ=I+1
I=I+4
ITMP=0
CODE=0
NFLG=1
ML=IZ+M
C RE=REP R=RHY L=LIT M=MOVE MX=MOVX N=NOTES NU=NUM
C S--L=SUBL S--N=SUBN T=TAP RT=RTAP RL=RLIST RN=RNOTES
C QU=QUADC QUX=QUADX
5702 ML=ML+1
IF(ML.GT.72)GO TO 99
N=INP(ML)
IF(N.EQ.IBLA.OR.N.EQ.',')GO TO 5702
NL=INP(ML+1)
JA=-1
ISUB=0
IF(N.EQ.IXX)GO TO 2703
IF(N.EQ.'R')GO TO 6702
IF(N.EQ.IF)GO TO 8702
CC IF(N.EQ.ID)GO TO 1703
4005 JA=0
IF(N.EQ.IEN)GO TO 6005
IF(N.EQ.'M')GO TO 703
IF(N.EQ.'L')GO TO 2720
IF(N.EQ.ISS)GO TO 6703
IF(N.EQ.ITT)GO TO 4018
IF(N.EQ.IQT)GO TO 5720
IF(N.EQ.ISEMI)GO TO 2018
IF(N.EQ.IPP)JA=-1
C FOR /P5 P3/
CALL SCANR
IF(ISUB.EQ.8)GO TO 8
I=I+JJ
V(IJ+1)=NNUM+DF
IF(JJ.EQ.1)GO TO 4006
C IF NNUM IS '-2' THEN NOTES ARE PRINTED
IF(NNUM.NE.-2)GO TO 5006
IX=IJ+3
DO 2006 K=2,JJ,3
CC X=VX(K)
CC Y=VX(K+1)
CC IF(X.GT.Y)VX(K)=X+.999
CC2006 IF(Y.GT.X)VX(K+1)=Y+.999
2006 CALL RANR(VX,K)
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
5006 IX=IJ+2
DO 6006 K=1,JJ
6006 V(IX+K)=VX(K)
V(IX+JJ-2)=1.
C ABOVE ENSURES THAT LAST RAND. UNIT REACHES 100% - 5/74 *********
GO TO 3013
4006 IF(JA)VX1=VX1/100.+9999.
C CHANGES /P5 P3/ TO /P5 9999.03/
V(I-1)=VX1
GO TO 3013
6702 IF(NL.EQ.IE)GO TO 2703
C JUMP IF "REP"
IF(NL.EQ.ITT)GO TO 4018
C JUMP IF "RTAP"
CODE=-22
IF(NL.EQ.'L')CODE=-46.0
C JUMP IF "RLIST" (LIST OF RAND SELECTIONS)
IF(NL.NE.IEN)GO TO 1016
C JUMP IF NOT "RNOTES"
JA=0
C FOR SCANR
CODE=-36.
GO TO 1016
6005 CODE=-33
IF(NL.NE.'U')GO TO 1016
CODE=-44.
1610 JA=-1
GO TO 1016
8702 CODE=-35
IF(NL.EQ.'U')GO TO 1016
ML=ML+1
CALL SCANR
7 V(IJ+1)=CODE+DF
V(IJ+2)=1.
V(I)=VX1+85.
GO TO 7703
703 BW=V(IJ-2)
IC=0
DO 7031 K=ML+1,72
IF(INP(K).EQ.ISEMI)GO TO 8031
7031 IF(INP(K).EQ.IXX)IC=-1
C**************** JUNE 1,71 X 4
8031 I=I-1
V(I)=0
C ********* FEB. 15,71
X=-9900.-BY
IF(BY.EQ.0)X=-9900.-BG(LK)
IF(BW.EQ.X)GO TO 8005
IF(BW.NE.-9900.-BY)GO TO 1102
V(IJ-2)=X
GO TO 8005
1102 V(IJ)=V(IJ-1)
V(IJ-1)=X
IJ=IJ+1
I=I+1
8005 LP=IJ-1
BW=-9900.-X
ISUB=2
IZ=-1
C ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
4703 GO TO 1299
102 IF(IZ.LT.0)GO TO 2102
BW=V(ICT)+BW
V(I)=-9900.-BW
V(I+1)=V(LP)
V(I+2)=(JJ+2)*ALL
V(I+3)=CODE+DF
I=I+4
IZ=1
2102 IF(BW.LT.10000.)CALL BGSORT(BW)
C ROUND-OFF NONSENSE
2 VX3=-9900.
VX2=VX3
CALL SCANR
IF(JJ.EQ.4)GO TO 99
IF(VX3.NE.-9900.)GO TO 3102
IF(VX2.NE.-9900.)GO TO 4102
VX2=VX1
VX1=10000.
4102 VX3=VX2
JJ=3
C 1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
3102 IF(IZ.GE.0)GO TO 3006
V(IJ)=(JJ+2)*ALL
C WORD COUNT
CODE=-55.
IF(JJ.NE.3)CODE=-57.
C THIS IS NOW OUT, FEB 15,70. -10000. MEANS 'NOTES AT BG TIME 0'
IF(NFLG)CODE=CODE-1.
IF(IC)CODE=-59.
C**************** JUNE 1,71
C CODE=-56 OR -58 FOR NOTES.
V(IJ+1)=CODE+DF
IZ=0
3006 IF(NFLG.EQ.1)GO TO 5005
CC IF(VX2.GT.VX3)VX2=VX2+.999
CC IF(VX3.GE.VX2)VX3=VX3+.999
CC IF(JJ.EQ.3)GO TO 5005
CC IF(VX4.GT.VX5)VX4=VX4+.999
CC IF(VX5.GE.VX4)VX5=VX5+.999
CALL RANR(VX,2)
IF(JJ.NE.3)CALL RANR(VX,4)
C FOR RAN. SELEC. OF NOTES. FINDS HIGHEST NOTE.
5005 ICT=I
IJ=IJ+1
DO 1006 K=1,JJ
1006 V(IJ+K)=VX(K)
I=I+JJ
IJ=I+2
IF(IAMP.EQ.0)GO TO 1299
C*************** MAY 18,71 ***** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
V(I)=-9900.-BY
GO TO 8703
CC1703 IF(NL.NE.IF)GO TO 4005
CC CODE=-45.
CC GO TO 1016
C ABOVE IS**** WAS ***** FOR 'DF' (DUTY FACTOR)
7703 V(IJ)=4.*ALL
8703 I=I+1
GO TO 4773
C FOR SUBROUTINES, -12=NUMS. -11=LETTERS.
6703 CODE=-12.
IF(INP(ML+3).EQ.'L')CODE=-11.
V(IJ)=2.*ALL
V(IJ+1)=CODE+DF
I=I-1
GO TO 4773
4018 CNT(LK)=-9900.-BY
P(LK)=V(I-4)
JREAD=3
GO TO 4400
C JUMPS TO READER
443 IF(LN.NE.0)REREAD 107,K,IPT(LK,1)
IF(LN.EQ.0)REREAD 8001,IPT(LK,1)
C NAME OF RHYTHM FILE. (ONLY ONE PER INST.) READS DATA JUST BEFORE RUN
IF(NL.NE.ITT)GO TO 2338
CODE=-23.
GO TO 1016
2338 I=I-4
GO TO 4773
3018 CNT(KZY)=-9900.
JREAD=4
GO TO 4400
444 IF(LN.NE.0)REREAD 107,K,IPT(KZY,1)
IF(LN.EQ.0)REREAD 8001,IPT(KZY,1)
P(KZY)=980000.
GO TO 2308
C CAN'T USE 'TAP' OR 'RTAP' WITH INST KZY IF USING 'CONDUCT'.
C 'REP'
2703 ML=ML+1
VX1=0
VX2=0
VX3=0
IF(N.EQ.IXX)GO TO 2704
INP(ML)=IBLA
INP(ML+1)=IBLA
C WIPES OUT 'EP' IN 'REP'
2704 CALL SCANR
V(IJ)=3.
V(IJ+1)=-66.0
IF(VX1.EQ.32.)VX1=1.
IF(VX1.EQ.0)VX1=LPAR
IF(VX2.EQ.0)VX2=LK-1
V(IJ+2)=VX1+VX2*10000.
KL=VX2
IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
IF(VX3.EQ.0)GO TO 4773
L=VX3
ML=LK+1
DO 1018 KL=ML,L
IF(LPAR.GT.NP(KL).AND.LPAR.LT.31)NP(KL)=LPAR
IF(DUR(KL))DUR(KL)=DUR(LK)
C TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'
V(I)=V(I-4)+10000.
V(I+1)=3.
V(I+2)=-66.
V(I+3)=V(I-1)
1018 I=I+4
GO TO 4773
2018 IF(DF.EQ.0)GO TO 20181
C NEXT FOR Pn SUBR/ I.E. NOTHING BUT P AND SUB CALL. 7/73
V(IJ+1)=-201.
V(IJ+2)=1.
V(IJ+3)=0
GO TO 7703
20181 V(IJ)=3.
V(IJ+1)=-66.
V(IJ+2)=NW+LK*10000
GO TO 4773
C READS /P5 .3 "ABC" .7 "XYZ"/
8 V(IJ+1)=-77.+DF
C DF HAS SUBR CALL INFO
I=I+1
VX(JJ-1)=1
C FOR RAND. SINGLE LITS.
DO 3722 K=1,JJ,2
V(I)=VX(K)
3722 I=I+1
V(IJ+2)=JJ/2
V(IJ+3)=I
DO 4722 K=2,JJ,2
KN=I
I=I+1
L=VX(K)
DO 6722 KL=L,72
IF(INP(KL).EQ.IQT)GO TO 4722
IV(I)=INP(KL)
6722 I=I+1
4722 V(KN)=I-KN-1
V(IJ)=(I-IJ)*ALL
GO TO 4773
2720 QTS=0
ISUB=104
GO TO 1299
104 DO 6721 K=ML,72
JC=K+1
IF(INP(K).EQ.IQT)GO TO 7721
6721 IF(INP(K).EQ.KSLA.OR.INP(K).EQ.ISEMI)GO TO 7232
C FOR REPEAT OF ITEM BY SLASH
7232 DO 7231 K=I-1,1,-1
IF(ABS(V(K)).GT.72.)GO TO 7231
NL=V(K)
DO 7230 KL=K,K+NL
V(I)=V(KL)
7230 I=I+1
GO TO 27222
7231 CONTINUE
5720 IAMP=-1
JC=ML+1
C FOR SINGLE 'LIT' ITEMS.
7721 DO 1722 KL=JC+1,72
IF(INP(KL).NE.IQT)GO TO 1722
JD=KL-1
ML=KL+1
NL=KL-JC
C EXTENT OF LIT ITEM IS FOUND
GO TO 8721
1722 CONTINUE
C CAN'T USE SLASH FOR REPEAT AFTER @Q
8721 V(I)=NL
DO 9721 K=JC,JD
C PUTS ITEM IN "IV" ARRAY
I=I+1
9721 IV(I)=INP(K)
I=I+1
27222 IF(IAMP.EQ.0)GO TO 1299
2722 V(I)=999.
QTS=-1.
27221 V(IJ+1)=-88.+DF
V(IJ)=(I-IJ+1)*ALL
IJ=IJ+2
V(IJ)=IJ+1
I=I+1
ISUB=1
GO TO 1299
7720 V(I)=LK
V(I+1)=3.
V(I+2)=-67.
ML=ML+4
CALL SCANR
V(I+3)=VX1
I=I+4
L=VX1
IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
GO TO 4773
C TYPE 'DUPL N;' N=INST # TO BE DUPLICATED.
142 FORMAT(I,15A5)
1301 FORMAT(15A5)
2773 FORMAT(I,A5,72A1)
2114 FORMAT(I,72A1)
300 FORMAT(I,3F,A1)
301 FORMAT(3F,A1)
6 KB=KB+1
IF(JED.GT.0)JED=0
IF(J.EQ.'INSER')GO TO 1340
OTH(KB,1)=VX1*100000.+VX2*100.+VX3
GO TO 340
1340 X=VX1
IF(VX2.NE.0)X=1000000.+VX1*100000.+VX2
OTH(KB,1)=X
GO TO 1338
C ABOVE IS TO PUT INSERT AFTER NOTE # OF A PARTICULAR
C INSTRUMENT. FOR COMMENT AT START, SET BG TIME TO 1,1
C - BEGIN LINE WITH <,END WITH ;
C UP TO 75 CHARACTERS MAY BE TYPED.
340 IF(VX3.NE.2)GO TO 1338
IF(ITYP.GE.0)GO TO 449
JREAD=5
GO TO 4400
445 OTH(KB,3)=1.
IF(LN.EQ.0)GO TO 447
REREAD 300,K,OTH(KB,2)
GO TO 1447
447 REREAD 301,OTH(KB,2)
1447 IF(JED)GO TO 2308
3445 TYPE TEDIT
ACCEPT 77732,K
IF(K.EQ.'G')JED=-1
IF(J.EQ.'INSER')GO TO 3446
IF(K.NE.'Y'.OR.JED)GO TO 2308
449 TYPE TPALN
ACCEPT 301,OTH(KB,2)
IF(JED)WRITE(21,301) OTH(KB,2)
GO TO 2308
1338 IF(ITYP.GE.0)GO TO 1449
JREAD=6
GO TO 4400
446 IF(LN.EQ.0)GO TO 448
REREAD 142,K,(OTH(KB,JD),JD=2,16)
GO TO 1446
448 REREAD 1301,(OTH(KB,JD),JD=2,16)
1446 IF(JED)2446,3445,2446
3446 IF(K.NE.'Y'.OR.JED)GO TO 2446
1449 TYPE TPALN
ACCEPT 1301,(OTH(KB,JD),JD=2,16)
IF(JED)WRITE(21,1301)(OTH(KB,JD),JD=2,16)
2446 X=OTH(KB,2)
IF(J.EQ.'INSER'.AND.VX3.NE.0.AND.X.NE.'*')GO TO 6
IF(X.EQ.'*')KB=KB-1
C ALLOWS SEVERAL LINES OF 'INSERT' IF ANY 3RD #.
C LAST LINE HAS '*' IN COLUMN 1.
GO TO 2308
C IF NO PARAM NUM IS GIVEN, ALL PARAMS MUST BE TYPED.
C INSERT MAY INCLUDE 10 CHARS(P3-P30),
C P2, A # ONLY. IF MORE THAN 1 PARAM IS TO BE EDITED AND
C P2 IS ONE OF THEM, FIRST EDIT P2 TO DESIRED VALUE,
C CHANGE P2 TO MINUS = THEN INSERT ENTIRE NOTE TO PLAY
C JUST AFTER ORIGINAL NOTE(WHICH WILL BE A REST).
C BX=INST N. Y=NOTE N. Z=PARAM N.
1899 CALL SCANR
GO TO(1,2,3,4,5,6),ISUB
1106 KTMP=1
TP=60.
IAMP=0
BW=BY
ITMP=-1
ISUB=5
JA=-1
GO TO 2016
3019 V(I)=990000.00
V(I+1)=4.
V(I+2)=VX1
V(I+3)=VX2/TP
V(I+4)=VX3/TP
I=I+5
BY=BW
C SEPT 18, 70
IF(VX1.EQ.0)GO TO 2308
BW=BW+VX1
V(I)=-9900.-BW
I=I+1
CALL BGSORT(BW)
9003 IF(IAMP)GO TO 4003
2016 VX3=0
VX2=0
GO TO 1299
5 IF(VX2.NE.0)GO TO 105
C 'TEMPO/120*;' OR 'TEMPO/1.5 72*;' IS OK.
VX2=VX1
VX1=0
105 IF(VX3.EQ.0)VX3=VX2
IF(VX2.LT.11.)TP=1.
IF(J.EQ.ITMPO)GO TO 3019
PCH(1,KTMP)=VX1
PCH(2,KTMP)=VX2
PCH(3,KTMP)=VX3
C PCH(1)=TIME (2)=MM1 (3)=MM2
KTMP=KTMP+1
IF(IAMP.EQ.0)GO TO 2016
4003 VX1=0
IAMP=0
VX2=VX3
IF(J.EQ.ITMPO)GO TO 3019
PCH(1,KTMP)=0
PCH(2,KTMP)=VX2
PCH(3,KTMP)=VX2
C MM CAN BE FROM 11 UP ITMPO FACTOR FROM 10 DOWN.
C UP TO 30 ITMPO CHANGES MAY BE MADE.
1016 IA=I
IZ=1
3100 V(I-2)=CODE+DF
ISUB=3
5016 IF(IAMP.GE.0)GO TO 1299
117 IF(IZ-2)3013,9004,9004
103 K=INP(ML)
IF(K.EQ.ITT)GO TO 1106
IF(K.EQ.ISEMI)GO TO 1014
IF(K.NE.IBLA) GO TO 1899
ML=ML+1
GO TO 103
C@@@@@@@@ MAY 13,71 @@@@@@
C**********FEB 19,71
C ABOVE
3 IF(VX1.EQ.-99.)GO TO 4022
IF(CODE.EQ.-22.)GO TO 2017
C************ MAY 19,71
IF(CODE.LT.-23.OR.IZ/2*2.EQ.IZ)GO TO 17
C CHECKS PAIRS OF NUMBERS FOR 'RTAP'
2017 IF(VX1.EQ.10000.)GO TO 17
VX1=4./VX1
IF(JJ.NE.1)GO TO 2014
V(I)=VX1
GO TO 114
1217 IF(VX1.EQ.10000.)GO TO 114
C FOR "FINE" IN LIST
CC IF(CODE.EQ.-46.)GO TO 4217
CC IF(VX1.GT.VX2)V(I)=VX1+.999
CC IF(VX2.GT.VX1)VX2=VX2+.999
C ABOVE EXTENDS RANGE TO GIVE HIGHEST NOTE A CHANCE
CC4217 V(I+1)=VX2
V(I+1)=VX2
IF(CODE.EQ.-36.)CALL RANR(V,I)
2217 I=I+1
C SETS UP STRING OF RAND SELECTIONS
GO TO 114
3217 V(I)=V(I-2)
V(I+1)=RB
C FOR SLASH REPTS OF RAND SELEC UNITS. ("REP" CAN'T BE USED!)
GO TO 2217
C******** PUT IN ERROR TRAP FOR "REP" ETC. ******
2014 DO 9006 L=2,JJ
IF(VX(L).EQ.0)GO TO 17
9006 VX1=4./VX(L)+VX1
JJ=1
17 V(I)=VX1
IF(CODE.EQ.-46..OR.CODE.EQ.-36.)GO TO 1217
C JUMP IF STRING OF RAND SELECS.
IF(JJ.EQ.1)GO TO 114
L=VX(JJ)-1
X=V(I)
NL=I+1
I=L+I
DO 1017 K=NL,I
1017 V(K)=X
C ADDS UP TOTAL OF NOTES IN SEQ.
IZ=IZ+L
GO TO 114
1014 IF(CODE.EQ.-46..OR.CODE.EQ.-36.)GO TO 3217
V(I)=RB
C RB SAVES IT FOR SLASH REPEAT
114 RB=V(I)
I=I+1
IZ=IZ+1
GO TO 5016
4022 JC=VX2+.3
JD=VX3-.5
IF(JJ.EQ.2)JD=1
C********* MAY 19,71 ----MANY LINES ABOVE.
IZ=IZ+JC*JD
C JC=HOW MANY TIMES, JD=HOW MANY NOTES
DO 1005 K=1,JD
NL=I+JC-1
DO 2005 L=I,NL
2005 V(L)=V(L-JC)
1005 I=I+JC
RB=V(NL)
C RB SAVES DATA FOR SLASH REPEAT FEATURE.
GO TO 5016
9004 IF(ITMP.EQ.0)GO TO 3013
C*********** JUNE 1,71
IZ=IZ-1
C***** JAN. 1974
KA=1
IC=1
K=0
J=1
Z=0
RC=0
9007 Y=PCH(3,IC)/TP
X=PCH(2,IC)/TP
Z=PCH(1,IC)
YY=2.*Z/(Y+X)
224 IF(YY.NE.0)YY=2.*(Z-X*YY)/YY**2
XT(1)=X
XA=RA
RD=1
RB=0
ZZ=Z
7020 RA=V(IA+K)
IF(RA.EQ.10000.)GO TO 3013
4020 RD=1
IF(RA.LT.0)RD=-1.
RA=RA*RD
IF(KA.EQ.0)RA=RA-RC
W=RA
RB=W
IF(W.LE.Z)GO TO 2020
IF(Z.NE.0)GO TO 3020
RA=RA/Y
RB=-1.
RC=0
GO TO 8020
3020 W=Z
RC=W+RC
GO TO 24
2020 RC=0
24 IF(X.NE.Y)GO TO 424
RA=W/X
GO TO 8020
C DUR OF TMP + BG TIME OF TMP - NOTE VALUE -
C BG TIME OF NOTE. CHN=TBG.
424 RAX=XT(J)
RA=(-2.*RAX+(4.*RAX**2+8.*YY*W)**.5)/(2.*YY)
XT(J)=RAX+YY*RA
8020 IF(KA.EQ.0)RA=RA+XA
KA=1
IF(RC.NE.0)GO TO 1011
IF(T5.EQ.1)GO TO 8203
V(IA+K)=RA*RD
IF(K.EQ.IZ)GO TO 3013
C*********** JUNE 1,71
1011 IF(T5.EQ.1)GO TO 2011
K=K+1
IF(ZZ.NE.0)Z=Z-W
IF((Z.GT.0).OR.(RB.EQ.-1.))GO TO 7020
IC=IC+1
IF(RB.EQ.W)GO TO 9007
KA=0
K=K-1
GO TO 9007
C********* MAY 13,71 OMITS REPEATED RHY. FEATURE.
C ML=I-1
C ML=I-1
C*********** MAY 13,71 ********
3013 X=I-IJ
V(IJ+2)=X-3.
V(IJ)=X*ALL
IF(CODE.NE.-35)GO TO 4773
M=IJ+3
C SETS NUMBERS FOR FUNCS.
DO 313 K=M,I-1
313 IF(V(K).LT.85.)V(K)=V(K)+85.
GO TO 4773
2011 XA=RA
IF(K.GT.1)GO TO 9020
K=I-6
ZPAR=-9900.-CHN-ZZ
DO 3011 KL=8,I
IF((V(K).EQ.ZPAR).AND.(V(K+1).EQ.990000.))GO TO 9020
3011 K=K-1
9020 W=ZZ
IF(V(K+3))K=K+3
C ABOVE IS FOR TYPED IN TEMPO CHANGES
KA=K+3
ZZ=V(KA)
C DUR OF NEXT TEMPI
X=V(KA+1)
Y=V(KA+2)
213 KA=0
Z=ZZ
YY=2.*Z/(X+Y)
YY=2.*(Z-X*YY)/YY**2
CHN=CHN+W
XT(J)=X
IF(KA.EQ.1)Z=0
RA=PR
KA=0
K=K+3
GO TO 4020
2337 T=0
DO 1107 K=1,30
1107 PL(K)=1.
C 2/74--WAS AT 17300/1 SETS DEFAULT OUTPUT MODE TO 1.
IF(ITYP)GO TO 23371
END FILE 21
DATA ENFI /25H(' INPUT ON FOR21.DAT'/) /
TYPE ENFI
C PUTS AWAY TYPED IN DATA. TO REUSE, EDIT FOR21.DAT.
23371 IF(SOS)WRITE(JOUT,902)
C WRITES A BLANK LINE
NWZZ=0
IAMP=0
IT3=0
K=1
IX=0
BG(NINS+1)=19999.
4011 IF(CNT(K))GO TO 5011
6011 IF(K.EQ.KZY)GO TO 4337
K=K+1
GO TO 4011
5011 L=V(I-1)/(-9900.)
IF(L.EQ.1)I=I-1
V(I)=CNT(K)
V(I+1)=P(K)
V(I+3)=-44.
I=I+5
IF(P(K).EQ.980000.)I=I-4
KL=I
REWIND 1
ICT=IPT(K,1)
CALL IFILE(1,ICT)
9011 L=I+6
READ(1,7011)(V(M),M=I,L)
C READS "CONDUCT" AND "RHYTHM" (TAP) DATA.
IF(V(L).EQ.999.)GO TO 8011
I=L+1
GO TO 9011
8011 IF(P(K).NE.980000.)GO TO 6337
DO 7337 K=L,I,-1
7337 IF(V(K).NE.999.)GO TO 8337
8337 I=K-1
V(I)=0
V(I+1)=V(K)
V(I+2)=V(K)
C K WAS I-1 ABOVE.
I=I+3
V(KL+1)=I-KL-1
C ABOVE RESETS WORDCOUNT FOR 'CONDUCT' DATA.
GO TO 4337
6337 DO 5337 M=I,L
KN=M
5337 IF(V(M).EQ.999.)GO TO 3337
3337 I=KN
KN=I-KL
V(KL-1)=KN
V(KL-3)=KN+3
GO TO 6011
7011 FORMAT(7F)
4337 IF(V(I-1).EQ.-9900.-BY)I=I-1
V(I)=-19899.
PP1=0
T6=10000.
DO 2118 K=1,NINS
ROFF(K)=0
C********* FEB 17,71
M=NP(K)
IT(K)=0
IPT(K,31)=0
NCNT(K,31)=1
DO 2118 L=1,M
NCNT(K,L)=1
2118 IPT(K,L)=0
DO 5013 K=1,IXIN
5013 X=RAND(0.0,0.0)
REWIND 1
IF(MX)CALL OFILE(1,ISLAC)
NW=1
NWX=0
TDUR=0
A=0
T2=1.
T4=1.
T5=0
J=1
MK=0
C IS THE ABOVE NEEDED?
IF(MX.NE.3)GO TO 40021
K=4
CC10023 N=V(K)/-11.
10023 N=AMOD(V(K),100.0)/-11.
C AMOD NEEDED BECAUSE CODE # MAY HAVE -100 FOR DF OR -200 FOR SUBR.
IF((N.NE.2.AND.N.NE.3.AND.N.NE.4).OR
1 .V(K-2).LT.10000.)GO TO 10021
J=V(K+1)
IF(J.EQ.1)GO TO 10024
IF(N.EQ.3.AND.V(K+J+1).EQ.101.)J=J-1
N=V(K-2)
L=N/10000
M=N-L*10000
TYPE 10022,INST(L),M,J
10024 K=K+ABS(V(K-1))
10021 K=K+1
IF(K.LT.I)GO TO 10023
40021 IF(MZ.NE.-4)GO TO 1002
N=1
40022 K=N+1
IF(N.GT.I)CALL EXIT
X=V(N)
IF(X.EQ.-199..OR.X.EQ.-99.)GO TO 40024
IF(X.GE.0)GO TO 40023
PRINT 4002,X
N=N+1
GO TO 40022
40024 J=N+1
GO TO 40025
C FOR 'SECTIONS'
40023 J=ABS(V(K))+K-1
40025 PRINT 4002,(V(K),K=N,J)
N=J+1
GO TO 40022
10022 FORMAT(1XA5,' P',I2,' HAS ',I3,' ITEMS.')
4002 FORMAT(10F12.3)
1002 IF(IDALL)GO TO 600
X=DUR(IDALL)
DO 2002 K=1,NINS
2002 IF(DUR(K))DUR(K)=X
C ***** SORTER *************************
C ******* OUTPUT LOOP FROM HERE ON ********
600 IL=0
C********** BELOW IS FOR 'SECTIONS'
KODE=0
NWX=NWX+1
MK=MK+1
Y=BNW(NW)
723 IL=IL+1
3723 Z=V(IL)
IF(Z.EQ.-19899.)GO TO 732
IF(Z.NE.-9900.-Y)GO TO 723
C********** BELOW IS FOR 'SECTIONS'
IF(V(IL-2).EQ.-199.)KODE=IV(IL-1)
2723 IL=IL+1
729 K=IL+2
MOT=V(IL+1)
RD=V(K)
IF(RD.EQ.-67.)GO TO 3726
RB=V(IL)
C************ DOWN TO 4150 IS FOR 'SECTIONS'
IF(RB.NE.-99.)GO TO 4150
KODE=IV(K-1)
2160 IF(KODE.EQ.0)GO TO 723
IF(MZ)WRITE(JOUT,9150),KODE
KL=Y/10000.
RB=Y+KL*10000.
DO 5150 KL=1,I
IF(V(KL).NE.-199..OR.IV(KL+1).NE.KODE)GO TO 5150
IV(K-1)=0
C WHEN 'PLAY' HAS BEEN FOUND, INDENTIFIER CHNGED TO 0
RD=V(KL+2)+9900.
DO 6150 L=KL+2,I
M=V(L)/(-9900.)
IF(M.NE.1)GO TO 6150
RA=RB+RD-V(L)-9900.
V(L)=-9900.-RA
C UPDATES BG TIMES INSIDE SECTION.
CALL BGSORT(RA)
C7150 IF(RA.EQ.BNW(KA))GO TO 6150
C UPDATES LIST OF CHANGE TIMES.
6150 IF(V(L).EQ.-299.)GO TO 160
5150 CONTINUE
160 IL=1
GO TO 3723
C*********** ABOVE IS FOR 'SECTION' REPEATS
4150 LK=RB/10000.+.2
IF(LK.GE.98)GO TO 7700
LP=RB-LK*10000
C LK=INST # LP=PARAM #
LN=IPT(LK,LP)
IPT(LK,LP)=IL+2
IF(RD.EQ.-66.)GO TO 726
IF(RD.EQ.-55..OR.RD.EQ.-56.)GO TO 1726
IF(RD.EQ.-23)GO TO 6700
2727 ML=IPT(LK,LP)
IF(MOT.GT.0)GO TO 3727
C USE NEG WDCNT FOR 'ALL'
DO 4727 KL=LK+1,NINS
IF(NP(KL).LT.LP.AND.LP.LT.31)NP(KL)=LP
IPT(KL,LP)=-(LK+(LP-1)*KZY)
NCNT(KL,LP)=10000
4727 IF(DUR(KL))DUR(KL)=1000.
C ASSUMES THAT DURATIONS ARE SET IN 'NOTES'.
C AFTER 'ALL' IS USED ONCE IT WORKS LIKE DUPL OR REP.
CC GO TO 2150
C ABOVE CHANGED TO BELOW DEC.6,72. 'ALL' WAS OMITTING 1ST ITEM.
GO TO 727
C 'MOVE' WITH 'ALL' KEEPS ORIGINAL TIME DATA REGARDLESS OF BG TIMES.
3727 IF(V(IL).NE.V(LN-1).OR.LN.EQ.0)GO TO 727
CC ************ JAN 20 ***********
DO 1727 L=1,NINS
DO 1727 KL=1,NP(L)
IF(LN.NE.IPT(L,KL))GO TO 1727
NCNT(L,KL)=10000
C ******* JAN 29,70
IPT(L,KL)=ML
C RESETS POINTERS FOR DUPL AND REP INSTS.
C *** 'ALL' WILL NOT WORK WITH RAN TF.!!!!!*******FEB 21,73
1727 CONTINUE
727 NCNT(LK,LP)=10000
C******** MAY 13,71 RHY REP. FEATURE OMITTED.
2150 IF(MOT)MOT=-MOT
IL=IL+MOT+1
3150 IF(V(IL))GO TO 3723
GO TO 729
726 RB=V(IL+3)
K=RB/10000.
L=RB-K*10000
IPT(LK,LP)=-(K+(L-1)*KZY)
GO TO 2727
3726 LK=V(IL)
M=V(K+1)
KL=NP(M)
DO 4726 L=1,KL
IPT(LK,L)=IPT(M,L)
IF(IPT(M,L).NE.0)NCNT(LK,L)=10000
C****** JUN 29 71 (LK,L) WAS (L,K)....???????
4726 CONTINUE
IPT(LK,31)=IPT(M,31)
K=0
GO TO 2150
C ABOVE IS FOR DUPLICATION ROUTINE NEXT ADJUSTS TIMES FOR 'RTAP'
6700 KL=IL+V(IL+1)+1.3
RC=V(K-2)
1770 IF(V(KL))GO TO 700
2700 KL=KL+V(KL+1)+1.3
GO TO 1770
700 KL=KL+1
IF(Z.NE.V(KL-1).OR.V(KL).NE.RC)GO TO 2700
KL=KL+3
KN=IL+3
LN=V(KN)+.3
DO 3700 L=1,LN,2
RA=V(L+KN)
KA=V(L+KN+1)+.3
RB=0
DO 4700 LP=1,KA
4700 RB=RB+V(KL+LP)
DO 5700 LP=1,KA
5700 V(KL+LP)=V(KL+LP)/RB*RA
V(KL+KA)=V(KL+KA)+.00030
3700 KL=KL+KA
GO TO 2150
C BELOW FOR 'TEMPO' SETUP
7700 T2=V(IL+4)
T1=V(IL+3)
TBG=Y
TDUR=V(IL+2)
AC=2.*TDUR/(T1+T2)
AC=2.*(TDUR-T1*AC)/AC**2
8700 IF(TDUR.EQ.0)TDUR=10000.
T5=1.
T6=TBG+TDUR
IT3=1.
IF(LK.EQ.98)IT3=IL+2
T4=1.
GO TO 2150
C*************** ANY WDCNTS DOWN FROM HERE. *********
C NEXT ADJUSTS 'MOVE' TIMES IF BG IS AT A NOTE NUMBER.
1726 IF(V(IL-1).GT.-19000.)GO TO 2727
RA=BT
K=IL-1
2726 V(K)=-9900.-RA
ISUB=-1
L=K+5
RB=V(L)+V(L-1)
V(L-1)=RA
K=K+V(K+2)+2
IF(V(K).GT.-19000..OR.V(K+1).NE.V(IL).OR.
1 V(K).NE.-9900.-RB)GO TO 2727
RA=RA+V(L)
CALL BGSORT(RA)
GO TO 2726
C CONVERTS BG TIME OF NOTE NUM TO REAL TIME. DOESN'T WORK WITH -66!
C NOW WE BEGIN ON!! NOTE NUM. NOT AFTER NOTE NUM.
732 DO 2606 K=NW,NWZ
2606 BNW(K)=BNW(K+1)
NWZ=NWZ-1
IF(NWZ.EQ.0)GO TO 2111
IF(NWZZ.EQ.1)GO TO 5111
NWZZ=1
IF(NWZ.EQ.1)GO TO 1111
DO 3111 K=1,NWZ
IF(BNW(K).LT.1000.)GO TO 3111
X=BNW(NWZZ)
BNW(NWZZ)=BNW(K)
BNW(K)=X
NWZZ=NWZZ+1
3111 CONTINUE
5111 IF(NWZZ.EQ.NWZ)GO TO 1111
L=NWZZ+1
X=BNW(NWZZ)
DO 4111 K=L,NWZ
IF(BNW(K).GT.X)GO TO 4111
RA=BNW(K)
BNW(K)=X
X=RA
4111 CONTINUE
BNW(NWZZ)=X
GO TO 1111
111 FORMAT(1XA5,'.DAT',12X,'EDIT FILE NAME=',A5,8X,
1'V ARRAY=',I4,'/2000 TEMPO FACTOR=',F6.2,4X,
1'RANDOM NUMBER =',I6/)
1023 FORMAT(/' < ',A5,'.DAT '/1XA5)
C********** BELOW IS FOR 'SECTIONS'
9150 FORMAT(/3X'******* SECTION ',A1)
2111 NWZ=-1
C ABOVE ORDERS BNW DATA TO SAVE TIME AT 1108 ON PG5.
1111 IF(MZ.EQ.0)GO TO 1601
IF(NWX.NE.1)GO TO 1486
WRITE(JOUT,111),ISLAC,IFLNM,I,TF,IXIN
C*********** JUNE 1,71
C********** BELOW IS FOR 'SECTIONS'
1486 IF(KODE.NE.0)WRITE(JOUT,9150),KODE
K=NWX-1
C*********** JUNE 1,71
IF(NWX.GT.1.AND.IT(J).NE.-3)WRITE(JOUT,3154),K,Y
IF(IT(J).EQ.-3)WRITE(JOUT,5154),K,BX,INST(J)
C*********** JUNE 1,71 X 3 K'S
DO 602 K=1,NINS
48 LK=INST(K)
C*********** JUNE 1,71
IF(NCNT(K,31).NE.10000.AND.NWX.GT.1)GO TO 602
CCNOV,72 IF(NCNT(K,31).NE.10000.AND.NWX.GT.1)GO TO 8826
NCNT(K,31)=1
IJ=IPT(K,31)
X=0
IF(IJ.NE.0)X=V(IJ+2)
WRITE(JOUT,5396),LK,X
X=DUR(K)
IF(X.GT.10000.)GO TO 83
WRITE(JOUT,8396),X
CCNOV,72 GO TO 8826
GO TO 602
5396 FORMAT(5XA5,' RANDOM TF =',F4.2,10X,'DURATION =',$)
7396 FORMAT('+',F5.0,' NOTES')
CCNOV,72
CC4396 FORMAT(5XA5,' % RANDOM RESTS DUR=',F7.3,'", FROM',
CC 1F6.3,' TO',F6.3)
CC485 FORMAT(5XA5,' % RANDOM RESTS = ',F4.2)
CCNOV,72
8396 FORMAT('+',F6.2,'"')
83 X=X-10000.
WRITE(JOUT,7396),X
CCNOV,72 *************************************************
CC8826 IF(NCNT(K,1).NE.10000)GO TO 602
CC NCNT(K,1)=1
CC IJ=IPT(K,1)+2
C********* FEB 19,71
CC IF(V(IJ)-5.)GO TO 7826
CC WRITE(JOUT,4396),LK,V(IJ-1),V(IJ),V(IJ+1)
C********* FEB 19,71
CC GO TO 602
CC7826 WRITE(JOUT,485),LK,V(IJ)
CCNOV,72 *************************************************
602 CONTINUE
715 IF(IT3.NE.1.)GO TO 1602
RA=T1*TP
RB=T2*TP
WRITE(JOUT,6154),RA,RB,TDUR
IT3=0
1602 IF(NWX.EQ.1)GO TO 315
IF(IT(J).EQ.-3)GO TO 1108
C*********** JUNE 1,71
6154 FORMAT(' TMP=',F7.3,' TO',F8.3,' DURING',F6.2,' SECS.'/)
7154 FORMAT(' ''CONDUCT'' FILE NAME = ',A5/)
5154 FORMAT(/' << CHANGE',I3,' BEGINS ON NOTE',F5.0,1XA5,' >>'/)
902 FORMAT(1XA5/)
3154 FORMAT(/' << BASIC TIME OF CHANGE',I3,' IS',F8.3,'" >>'/)
4154 FORMAT(' THE FIRST',F9.4,'" ARE OMITTED'/)
C*********** JUNE 1,71
IT(J)=IT(J)/10
GO TO 1108
315 IF(IT3.GT.1)WRITE(JOUT,7154),ICT
IF(OP1.NE.0)WRITE(JOUT,4154),OP1
1601 IF(NWX.GT.1) GO TO 1108
IF(MZ)WRITE(JOUT,1023),ISLAC,PLAY
IF(TF.GT.10.)TF=TF/60.
TF=1000./TF
DO 6015 K=1,30
6015 COPY(K)=-9900.
C INITS PARAM REPRESSION FEATURE.
IF(KB.EQ.0)GO TO 9926
ML=NINS+1
NL=NINS+KB
DO 9826 K=ML,NL
9826 BG(K)=OTH(K-NINS,1)
C 'OTH' INSERTS, WITH BG TIME IN SECONDS, CAN ONLY BE SET WITH TF=1
9926 DO 5015 K=1,NINS
IQ(K)=BG(K)*10000.
BG(K)=0
INP(K)=0
P1(K)=0
IF(DUR(K).LT.10000.)DUR(K)=DUR(K)-.0001
C******* FEB. 16,71 FOR ROUND-OFF NONSENSE
5015 CNT(K)=0
IF(MX)WRITE(1,1023)ISLAC,PLAY
BW=0
GO TO 500
752 FORMAT(1X15A5)
1108 M=0
JC=0
IF(NWZ)GO TO 1740
C NWZZ IS SET AT 3111 IN SORTR.
DO 740 K=1,NWZZ
X=BNW(K)
IF(X-.0001.GT.BT.OR.X.LE.BW.OR.BW)GO TO 2740
IT(J)=IT(J)*10
NW=K
GO TO 600
2740 IF(X.LT.1000..OR.X-J*10000.NE.CNT(J)+1.)GO TO 740
X=BT+PR
NW=K
BX=CNT(J)+1.
IT(J)=-3
GO TO 600
740 CONTINUE
IT(J)=0
1740 IF(J.LE.NINS)GO TO 31
7021 K=J-NINS
IF(JC.GT.0)K=JC
5740 IF(PP1.LT.OP1)GO TO 1752
IF(MZ)WRITE(JOUT,752),(OTH(K,L),L=2,16)
IF(MX)WRITE(1,752)(OTH(K,L),L=2,16)
C IF TF .NE.1, ALL INSERT TIMES MUST BE RESET
C IF FIRST PART OF NOTE LIST IS 'OMITTED', CHECK YOUR 'INSERTS'.
DO 17521 L=3,30
17521 COPY(L)=-9900.
C SO THAT ALL PARAMS WILL PRINT,AFTER AN INSERT.
1752 BG(K+NINS)=19999.
OTH(K,1)=19999.
IF(JC.GT.0)GO TO 21
31 KL=1
IF(KB.EQ.0)GO TO 2031
DO 1031 L=1,KB
K=L
X=OTH(K,1)-1000000.
M=X/100000.
IF(M.NE.J.OR.IQ(J).NE.0)GO TO 1031
C M=INST
IF(X-M*100000.EQ.CNT(J)+1)GO TO 5740
1031 CONTINUE
IF(J.GT.NINS)GO TO 500
2031 CNT(J)=CNT(J)+1
ICT=CNT(J)
C INSERT TRAP HERE FOR OVERLAP OF RESTARTED INSTS.******
NPA=NP(J)
PP1=P1(J)
IF(BT.GE.DUR(J))GO TO 5174
IF(IQ(J).EQ.0)GO TO 200
P2=-IQ(J)/10000.
IQ(J)=0
CNT(J)=-1
ICT=-1
GO TO 4203
C MK IS FLAG FOR RESTS
200 MK=0
IF((BT.EQ.0.AND.J.EQ.1).OR.IPT(J,1).EQ.0)GO TO 203
KN=IPT(J,1)-1
IF(KN.GT.0)GO TO 12033
12032 KN=JPT(-KN)
IF(KN)GO TO 12032
KN=KN-1
C FOR 'ALL' IN P32. FOLLOWS UP ON POINTERS TO POINTERS!
C SOMEDAY PUT P1(32) IN WITH OTHER PARAMS BELOW!!!!
12033 IJ=V(KN)
IF(ABS(V(KN)).EQ.4.)GO TO 1203
C 'IABS' IS FOR -4 USED WITH 'ALL'
Z=(BT+9900.+V(KN-2))/V(KN+2)
C******* FEB 19,71
IF(Z.GT.1.)Z=1.
Y=V(KN+3)
X=(V(KN+4)-Y)*Z+Y
C******* FEB 19,71
CC****** TAKEN OUT NOV 9,72 ??? IF(X.EQ.0)IPT(J,1)=0
GO TO 204
1203 X=V(KN+3)
204 Y=RAND(0.0,1.0)
IF(Y-X)MK=-1
203 DF=1.
C DF=DUTY FACTOR
DO 2155 L=2,NPA
ISUB=0
C WHY DOES ISUB APPEAR AT 14700/5?
IDF=0
C IDF IS DUTY FACTOR FLAG
IJ=IPT(J,L)
12031 IF(IJ)IJ=JPT(-IJ)
IF(IJ)GO TO 12031
C FOLLOWS UP ON POINTERS TO POINTERS!
PM=1.
IF(IJ.GT.1)GO TO 2157
P(L)=0
CC GO TO 21552
GO TO 21551
C 7/73
2157 LN=IJ+2
NM=ABS(V(IJ-1))+LN-4
NL=V(IJ)
IF(NL.GT.-200)GO TO 372
ISUB=-1
NL=NL+200
C FOR SUBROUTINE FLAG
372 IF(NL.GT.-100)GO TO 272
IDF=-1
NL=NL+100
C DEC.6,72 FINDS DUTY FACTOR PARAM
272 VIJ2=V(IJ+1)
KN=NL/(-11)
IF(KN.EQ.0)GO TO 1100
GO TO (61,62,62,62,65,65,67,68),KN
1100 IF(VIJ2.EQ.1.)GO TO 1200
ML=3
1900 KA=1
VX1=0
DO 1156 K=LN,NM,ML
VX(KA+1)=V(K)+VX(KA)
1156 KA=KA+1
X=RAND(0.0,1.)
DO 1157 K=2,11
IF(X.GT.VX(K))GO TO 1157
KL=K-1
IF(KN.EQ.7)GO TO 6157
GO TO 1400
1157 CONTINUE
1400 LN=IJ+3*KL
1462 RA=V(LN)
IF(RA.EQ.10000.)GO TO 5174
C FOR "FINE" IN RLIST
RB=V(LN+1)
PAR=RAND(RA,RB)
1300 IF(NL.NE.-1)PM=2.
C IF 2 THEN PRINTS A5
GO TO 1155
1200 PAR=V(IJ+2)
GO TO 1300
C NEXT IS FOR SUBROUTINE AND QUAD CALLS
61 IF(NL.LT.-12)GO TO 6100
601 X=P2
CC IF(NL.EQ.-11)PL(L)=2.
C '.5' MAKES ALL SUBR PARAMS PRINTOUT.
CALL SUBR
C******MAY 25,71
CC IF(P(L).EQ.10000.)GO TO 5174
IF(DF)GO TO 5174
C DF=-1 IN 'SUBR' WILL CAUSE 'END' FOR INST.
CC PM=PL(L)
IF(L.EQ.2)GO TO 4203
IF(X.EQ.P2)GO TO 21552
PP2=P2
PR=P2
GO TO 21552
C ABOVE IS FOR P2 CHANGES IN SUBROUTINE
C TF,TEMPO,CONDUCT WILL AFFECT P2 ONLY WHEN P2 CALLS THE SUBR.,
C ALL 'TEMPO' CHANGES WILL BE IGNORED!! (THEN DUR. IN SECS. MUST
C BE SET TO 'REAL TIME'.)
C NEXT IS FOR QUAD ROUTINES
6100 CALL QUAD(NL)
GO TO 21552
C FOLLOWING IS FOR STRINGS OF VALUES.
62 KL=NCNT(J,L)+1
IF(KL.GT.VIJ2)KL=1
IF(NL.NE.-46.AND.NL.NE.-36)GO TO 162
C THIS PART FOR STRINGS OF RAND SELECTION
LN=KL+IJ+1
KL=KL+1
IF(KL.GT.VIJ2)KL=1
NL=NL+45
C FOR NUMBERS ONLY SO FAR(THIS MAKES NL=-1. FOR NOTES, =9)
162 NCNT(J,L)=KL
IF(NL.GT.-22)GO TO 1462
C JUMP RAND SELECTION
PAR=V(IJ+KL+1)
C********** MAY 13,71 RHY REPEAT FEATURE OMITTED.
C************************
CC DEC.6,72 IF(NL.EQ.-45)DF=PAR
IF(KN.NE.3)GO TO 1155
C*******JULY 16,71 IF(PAR.EQ.101.)GO TO 5174
IF(PAR.EQ.10000.)GO TO 5174
PM=2.
IF(PAR.GT.100..OR.PAR.LT.1.)PM=3.
IF(PAR.EQ.85.)MK=-1
GO TO 5155
65 W=-9900.-V(IJ-3)
C W=BG TIME OF MOVE.
X=ABS(V(IJ-1))
IF(NL.EQ.-56.OR.NL.EQ.-58)PM=2.
Z=(BT-W)/VIJ2
C Z= % OF WAY THROUGH.
IF(Z.GT.1.)Z=1.
Y=V(LN)
W=V(IJ+3)
IF(X.EQ.7.)W=V(IJ+4)
IF(NL.LT.-58)GO TO 16002
PAR=(W-Y)*Z+Y
IF(X.EQ.7.)GO TO 1600
GO TO 1155
C************** JUNE 1,71
CC16002 PAR=(W-Y+1.)**Z-1.+Y
C FOR "MOVX"
CC IF(W-Y)PAR=(Y-W+1.)**(1.-Z)-1.+W
C******** FEB/73
16002 IF(W.EQ.0)W=W+.01
IF(Y.EQ.0)Y=Y+.01
PAR=Y*((W/Y)**Z)
C THE .01 IS NEEDED FOR MOVE TO OR FROM 0.
IF(X.NE.7.)GO TO 1155
W=V(IJ+5)
Y=V(IJ+3)
CC X=(W-Y+1.)**Z-1.+Y
CC IF(W-Y)X=(Y-W+1.)**(1.-Z)-1.+W
IF(W.EQ.0)W=.01
IF(Y.EQ.0)Y=.01
X=Y*((W/Y)**Z)
GO TO 16003
C NEXT IS FOR MOVING RAND RANGES.
C1600 PAR=(V(IJ+4)-Y)*Z+Y
1600 W=V(IJ+3)
C*********** BACK TO 65 IS NEW. FEB. 15,71
X=(V(IJ+5)-W)*Z+W
C************ JUNE 1,71
16003 PAR=RAND(PAR,X)
GO TO 1155
67 LN=IJ+3
NM=LN+VIJ2-1
ML=1
GO TO 1900
4155 K=(PAR-9999.0)*100.+.1
P(L)=P(K)
PM=PL(K)
GO TO 21551
C ANY # OVER 9999. REPEATS ANOTHER PARAM.(9999.21 REPEATS P21)
6157 LN=V(LN-1)
DO 1068 K=1,KL
1068 IF(K.LT.KL)LN=LN+V(LN)+1
2068 PM=LN+1
PAR=LN+V(LN)
GO TO 5155
68 KL=NCNT(J,L)
IF(KL.EQ.0.OR.KL.EQ.10000)KL=VIJ2
PM=KL+1
PAR=PM+V(KL)-1
KL=PAR+1
IF(V(KL).EQ.10000.)DUR(J)=BT
C 'END' OR 'FINE' IN 'LIT' LIST.
IF(V(KL).EQ.999.)KL=IJ+2
NCNT(J,L)=KL
GO TO 5155
C ******* JAN 20 *************
1155 IF(PAR.EQ.10000.)GO TO 5174
C TYPE 'END' AS LAST IN ANY STRING TO SET DURATION.
IF((PAR.GT.9999.).AND.(PM.EQ.1.))GO TO 4155
C****JULY 16,71 1155 IF((PAR.GT.9999.).AND.(PM.EQ.1.))GO TO 4155
5155 P(L)=PAR
21551 PL(L)=PM
IF(ISUB)GO TO 601
IF(L.EQ.2)GO TO 4203
21552 IF(IDF.GE.0)GO TO 2155
DF=PAR
IDF=0
2155 CONTINUE
9203 IF(KB.EQ.0)GO TO 1170
NL=KB
DO 2203 K=1,KB
X=OTH(NL,1)
IF(X.LT.100000.)GO TO 2203
L=X/100000.
Y=(X-L*100000.)/100.
IX=Y
JC=NL
IF(J.EQ.L.AND.IX.EQ.ICT)GO TO 5203
2203 NL=NL-1
GO TO 1170
4203 PR=P2
IF(T5.EQ.0)GO TO 7203
IF(IT3.LE.1.OR.BT.LT.TBG+TDUR)GO TO 6203
3155 IT3=IT3+3
TBG=TBG+TDUR
TDUR=V(IT3)
IF(BT.GE.TBG+TDUR)GO TO 3155
T1=V(IT3+1)
T2=V(IT3+2)
X=2.*TDUR/(T1+T2)
AC=2.*(TDUR-T1*X)/X**2
6203 RA=PR
IF(BT.EQ.TBG)XT(J)=T1
K=IT3
RC=0
RD=1
KA=1
RB=0
Z=TDUR+TBG-BT
X=T1
Y=T2
YY=AC
CHN=TBG
ZZ=TDUR
GO TO 4020
8203 P2=RA*RD
7203 P2=P2*T4
X=P2*TF
C P2 IS KEPT WITHOUT TF*
K=X+.5
IF(X)K=X-.5
72031 ROFF(J)=ROFF(J)+K-X
IF(ABS(ROFF(J)).LT.1.)GO TO 7155
Y=1.
IF(ROFF(J))Y=-1.
K=K-Y
ROFF(J)=ROFF(J)-Y
C ROUND-OFF GAP WILL NOT EXCEED .001
C*********** FEB 17,71
7155 PP2=K/1000.
C AVOIDS ROUND-OFF PROBLEMS
IF(IPT(J,31).EQ.0)GO TO 6155
IF(ICT)GO TO 1170
X=V(IPT(J,31)+2)/2.
Y=RAND(-X,X)
IF(PP2.GE.0)GO TO 615
MK=-1
PP2=-PP2
615 PP2=PP2-RDEV(J)+Y
RDEV(J)=Y
C TOTAL RAND DEV. WON'T EXCEED P31
C SET P31 TO .0001 TO BRING VOICE BACK TO EXACT TIME(0 WON'T DO IT)
K=PP2*1000.+.5
C****** CHECK THIS OUT 1/10/72 :::::::
61551 PP2=K/1000.
C NEVER MORE THAN .1( DEVIATION WITH RAN TF. (RTF=.05)
6155 IF(ICT)GO TO 9203
GO TO 2155
5203 JD=Y*100-IX*100+.5
IF(JD.GT.0)GO TO 3203
M=0
P1(J)=PP1+PP2
GO TO 7021
3203 P(JD)=OTH(JC,2)
X=OTH(JC,3)
IF(X.NE.1.)X=3.
C 'EDITS' PRINT,NUM. OR 5 CHARS.
PL(JD)=X
C NEXT ADDED NOV.72 CHECK FOR SIDE AFFECTS !!!!! **********
IF(JD.EQ.2)PP2=P2
C 'TF' AND 'TEMPO' WILL NOT AFFECT PP2 'EDITS'.
1170 IF(MK.OR.PP2)GO TO 2022
ZPAR=PP1
P1(J)=PP1+PP2
C ZPAR IS USED HERE WHEN OP1(OMIT) IS .GT.0. OMIT IS IN REAL TIME.
LK=INST(J)
2021 IF(PP1.LT.OP1)GO TO 2612
IF(INVIS(J).LT.0)GO TO 2170
C ALL PARAMS WILL PRINT,1ST TIME WHEN USING 'OMIT'.
IF(INONLY.GT.0)GO TO 1204
C*********** MAY 16,71 ↑↑↑
6021 IF(P(NPA).NE.COPY(NPA).OR.PL(NPA).GT.1)GO TO 5021
C******* MAY 25,71
C 'LIT' DATA WILL ALWAYS PRINT.
NPA=NPA-1
IF(NPA.GT.2)GO TO 6021
5021 DO 1304 K=3,NPA
1304 COPY(K)=P(K)
1204 IF(PL4.NE.1.)GO TO 2170
P4=P4*AMPFAC
L=0
INP(J)=P4
DO 1021 K=1,NINS
1021 IF(P1(K).GT.PP1)L=L+INP(K)
IF(L-IAMP-1)GO TO 2170
IAMP=L
AMPTIM=PP1
2170 IF(MX.EQ.3)GO TO 2612
C ********* MAY 17,71
PP1=PP1-OP1
C PUTS SPACES BETWEEN NOTES .GT. .05( APART
IF((MZ.NE.-1).OR.(A.GE.PP1))GO TO 5170
IF(INONLY)WRITE(JOUT,902)
A=PP1+.05
5170 ML=10
IF(NPA.LT.10)ML=NPA
MLX=3
NL=2
IF(INVIS(J).EQ.0)GO TO 3170
CC5170 IF(INVIS(J).EQ.0)GO TO 3170
CC MLX=3
LK=0
C NEEDED TO INIT INVISIBLE MODE PRINT-OUT (NO INST NAME, P1, P2)
C NEXT CREATES FORMAT DATA IN IFM ARRAY.
31701 KL=3
GO TO 4170
3170 IF(.NOT.INONLY.AND.J.NE.INONLY)GO TO 2612
VX(1)=PP1
VX2=PP2*DF
IFM3='F9.3,'
IFM4=IFM3
KL=5
CC ML=10
CC IF(NPA.LT.10)ML=NPA
CC MLX=3
CC NL=2
IF(NPA.LT.3)GO TO 2121
4170 NL=2
DO 1121 K=MLX,ML
X=P(K)
L=PL(K)
IF(L-2)321,521,621
321 IF(X.GE.0)GO TO 4211
IFM(KL)=IFCOM
NL=NL+1
KL=KL+1
4211 IFM(KL)='F9.3,'
C CREATES 'F9.3'
421 VX(KL-NL)=X
GO TO 1121
521 IFM(KL)=IFM2
C CREATES '1XA5'
LN=X
VX(KL-NL)=SCAL(LN)
GO TO 42
621 IF(L.GT.3)GO TO 721
VX(KL-NL)=X
C ABOVE LETS A5 WD BE USED IN SUBR BY SETTING PL(N)=3.
42 IFM(KL)=IFM2
GO TO 1121
721 LN=X
IFM(KL)=I1X
NL=NL+1
DO 821 M=1,LN-L+1
KL=KL+1
IOUT(KL-NL)=IV(L-1+M)
821 IFM(KL)=IA1
1121 KL=KL+1
C NO MORE THAN 80 ITEMS IN FORMAT.
2121 IF(KL.LE.80)GO TO 21211
21212 FORMAT(' ERROR! TOO MANY LIT. ITEMS')
TYPE 21212
21211 DO 921 M=KL+1,80
921 IFM(M)=IBLA
IFM(KL)=')'
L=KL-NL-1
IF(MX)WRITE(1,IFM)LK,(VX(K),K=1,L)
IF(.NOT.MZ)GO TO 30210
IF(ML.GE.NPA)IFM(KL)='$)'
WRITE(JOUT,IFM),LK,(VX(K),K=1,L)
30210 IF(ML.GE.NPA)GO TO 3021
MLX=ML+1
ML=ML+10
IF(ML.GT.NPA)ML=NPA
LK=IBLA
GO TO 31701
3021 IF(MX)WRITE(1,3616)INST(J),ICT
30211 IF(MZ)WRITE(JOUT,8902),J,INST(J),ICT,BT
2612 PP1=ZPAR
GO TO 21
8902 FORMAT('+;<'I2,1XA5,I4,' >',F7.3)
3616 FORMAT(';PRINT(P1);< ',A5,I4)
C PRINTS RESTS
2022 PP2=ABS(PP2)
C IN THIS VERSION TYPE 'R' FOR RESTS IN ANY PARAM BUT P2.
C FOR RESTS IN SEQS. TYPE -DUR.
C WHEN RANDOM RESTS ARE CHOSEN, SEQS. MISS NOTES.
C RAN RESTS ARE NOT TOUCHED BY SUBROUTINES!!!
INP(J)=0
P1(J)=PP1+PP2
C STORES NEXT P1 TIME FOR THIS INST.
IF((MZ.NE.-1).OR.(PP1.LT.OP1))GO TO 21
X=PP1-OP1
IF(A.GE.X)GO TO 121
WRITE(JOUT,902)
A=X+.05
121 IF(INONLY.OR.J.EQ.INONLY)WRITE(JOUT,1110),INST(J),X,PP2,
1 J,INST(J),ICT
21 PR=ABS(PR)
BG(J)=BT+PR
IF(ICT.EQ.DUR(J)-10000.)GO TO 5174
IF(BG(J).LT.DUR(J))GO TO 500
5174 BG(J)=19999.
DO 3174 K=1,NINS
C INSERTS CANT FOLLOW LAST REGULAR NOTE.
C (ADD REST IF INSERT AT END IS NEEDED.)
3174 IF(BG(K).LT.19999.)GO TO 500
GO TO 175
C CHOOSES INST WITH NEXT BEGIN TIME.
500 J=1
BW=BT
NL=NINS+KB
DO 22 K=2,NL
22 IF(BG(J).GT.BG(K))J=K
IF(J.GT.NINS.OR.NINS.EQ.1)GO TO 3022
J=1
DO 5022 K=2,NINS
X=P1(J)
Y=P1(K)+.0001
C LOWEST NUMBERED INST WILL COME 1ST IF BG TIMES ARE VERY CLOSE
IF(BG(J).EQ.19999.)X=19999.
IF(BG(K).EQ.19999.)Y=19999.
5022 IF(X.GT.Y)J=K
C ABOVE IS FOR ROUND-OFF PROBLEMS WITH 'TEMPO' AND 'CONDUCT'.
3022 BT=BG(J)
IF((BT.EQ.19999.).OR.(P1(J).GE.DURX))GO TO 175
IF(CNT(J).GT.0)GO TO 1022
IF(CNT(J).EQ.0)P1(J)=0
IF(CNT(J).EQ.-1)CNT(J)=0
C N.B. 'TF' CONTROLS BG TIME WHEN BG .GT. 0
1022 IF((BT.LT.T6).OR.(IT3.GT.1))GO TO 1108
T4=T2
T5=0
T6=10000.
GO TO 1108
1175 FORMAT('+',A5,'=',F7.3,2X,$)
1109 FORMAT(' FINISH; < ',A5,'.DAT')
1110 FORMAT(' <',A5,2F9.3,2X,'******* REST <'I2,1XA5,I4)
1603 FORMAT(' AMPL. FACTOR=',F4.2,', MAX.AMP.=',I4,', AT TIME',
1 F8.3)
175 IF(MZ)WRITE(JOUT,1109),ISLAC
CC IF(MX.GE.0)GO TO 603
IF(MX.GE.0)GO TO 4175
WRITE(1,1109),ISLAC
END FILE 1
603 FORMAT(' TOTAL DURS: ',$)
CC IF(MZ)GO TO 4175
CC TYPE 1603,AMPFAC,IAMP,AMPTIM
CC TYPE 603
CC GO TO 5175
4175 WRITE(JOUT,1603),AMPFAC,IAMP,AMPTIM
WRITE(JOUT,603)
5175 DO 2175 K=1,NINS
X=P1(K)-OP1
IF(MZ)GO TO 6175
TYPE 1175,INST(K),X
GO TO 2175
6175 WRITE(JOUT,1175),INST(K),X
2175 CONTINUE
IF(JOUT.NE.22)GO TO 3175
END FILE 22
CALL PRINT
REWIND 22
K='FOR22'
CALL OFILE(22,K)
C LEAVES FOR22.DAT WITH 0K
END FILE 22
3175 TYPE 1023,ISLAC
END